package edzest.basic;

public class J21_String {

	public static void main(String[] args) {
		// 문자열 클래스 다루기
		// 주민번호를 이용해서 성별 확인
		// 9: 남자
		// 8: 여자
		String jumin = "123456-9876543";
			  //indexNO 0123456789..... 0부터 시작
		
		System.out.println( "문자열 길이: " + jumin.length() );
		System.out.println( "성별문자: " + jumin.charAt(7) );
		System.out.println( "성별문자: " + jumin.substring( 7 ) );
		// 매개변수 1개면 시작위치부터 마지막 까지 (매개변수 + 1번째부터 시작. 인덱스 0부터 시작이니까)
		// Returns a new string that is a substring of this string. 
		// The substring begins with the character at the specified index and 
		// extends to the end of this string. 


		System.out.println( "성별문자: " + jumin.substring( 7,8 ) );
		// 시작위치, 끝위치 - 1
		// Returns a new string that is a substring of this string. 
		// The substring begins at the specified beginIndex and 
		// extends to the character at index endIndex - 1. 
		// Thus the length of the substring is endIndex-beginIndex. 

		// Examples: 

		// "hamburger".substring(4, 8) returns "urge"
		// "smiles".substring(1, 5) returns "mile"

		String msg = "hello";
		if(msg == "hello")
			System.out.println("일치함!");
		else
			System.out.println("일치안함!");
		
		String msg2 = "hello";
		if(msg == msg2)
			System.out.println("일치함!");
		else
			System.out.println("일치안함!");
		// 스트링리터럴로 스트링객체생성하면
		// JVM의 스트링리터럴테이블에 "hello"가 
		// 저장되고 다른 스트링객체의 스트링리터럴이
		// 동일한 내용을 가지면 같은 객체를 가리킨다
		// 책 페이지 341쪽
		
		String msg3 = new String("Java");
		String msg4 = new String("Java");
		if(msg3 == msg4)
			System.out.println("일치함!");
		else
			System.out.println("일치안함!");
		// msg3과 msg4가 메모리에 생성된 위치(주소)가 다름
		// String 객체에서  == 연산자를 사용하면
		// 참조된 주소의 동질성을 확인함
		
		// msg(리터럴)와 msg3(new) 비교
		String msg5 = new String("hello");
		if(msg == msg5)
			System.out.println("일치함!");
		else
			System.out.println("일치안함!");
		// msg와 msg5는 메모리에 생성된 위치(주소)가 다름
		// == 연산자로 비교해보면 불일치로 출력
		
		/*---------------------------------*/
		// 문자열 객체의 값을 비교할 때에는
		// == 연산자 대신에 equals 메서드를 사용해야 함
		if(msg3.equals(msg4))
			System.out.println("일치함!");
		else
			System.out.println("일치안함!");
		
		if(msg.equals(msg5))
			System.out.println("일치함!");
		else
			System.out.println("일치안함!");
		
		/*--------------------------------*/
		// 문자열 연결시 + 연산자를 사용하면
		// 필요없는 객체 생성이 동반되어
		// 메모리 사용율과 CPU 자원소모가 커짐
		// 따라서, StringBuilder나 StringBuffer를
		// 사용할 것을 추천!
		String sql = "update BookDB " +
			"set title=?, publish=?, author=?," +
			" regdate = sysdate " +
			" where id = ?";
		
		StringBuilder sql2 = new StringBuilder();
		sql2.append( "update BookDB ")
			.append( "set title=?,publish=?,author=?, " )
			.append( "regdate=sysdate" )
			.append( "where id = ?" );
		
		System.out.println( sql2 ); // 자동 형변환
		// String tmp = sql2; 
		// Type mismatch: cannot convert from StringBuilder to String
		String tmp = sql2.toString(); // 수동 형변환
		System.out.println( tmp );
	}

}
